home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
examples
/
demo
/
demosrc
/
d_forecast.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
26KB
|
789 lines
; $Id: d_forecast.pro,v 1.18 1997/04/21 18:51:35 tremblay Exp $
;
; Copyright (c) 1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
;
;+
; FILE:
; d_forecast.pro
;
; CALLING SEQUENCE: d_forecast
;
; PURPOSE:
; Shows forecast of a data set.
;
; MAJOR TOPICS: Statistics and widget.
;
; CATEGORY:
; IDL 5.0
;
; INTERNAL FUNCTIONS and PROCEDURES:
; pro AutoCorr - Compute the autocorrelation function
; pro AutoFCast - compute the autoforecast function
; fun Tsdata - Create a time series.
; pro ForecastEventHndl - Event handler
; pro CleanUpForecast - Cleanup
; pro D_Forecast - Main procedure
;
; EXTERNAL FUNCTIONS, PROCEDURES, and FILES:
; fun gettips - Read the tip file
; pro widtips - Create the tip widgets
; pro sizetips - Size the tip widgets
; forecast.txt
; forecast.tip
;
; REFERENCE: The Analysis of Time Series, An Introduction (Fourth Edition)
; Chapman and Hall
; ISBN 0-412-31820-2
;
; NAMED STRUCTURES:
; none.
;
; COMMON BLOCS:
; none.
;
; MODIFICATION HISTORY: Written by: GGS, RSI, January 1995
; Modified by DAT,RSI, July 1996 New GUI
; Remove common blocs.
;-
;--------------------------------------------------------------------
;
; PURPOSE Compute and plot the autocorrelation function.
;
pro AUTOCORR, $
event ; IN: event structure
; Get the info structure.
;
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY
; This call-back function computes the sample autocorrelation function
; and the 95% confidence interval of cYdata. The results are plotted in
; the draw window, cPwindow2.
currentYMargin = !Y.MARGIN
!Y.Margin = [3, currentYMargin[1]]
; Set the active plot window to cPwindow2.
;
WSET, info.cPwindow2
; Compute the sample autocorrelation function of cYdata for the time
; indexes, [0, 1, 2, ... , cNy-2].
;
autocorrY = A_CORRELATE(info.cYdata, INDGEN(info.cNy-1))
; Compute the 95% confidence interval for cYdata.
;
conf = 1.96 / SQRT(info.cNy)
; Establish the plotting coordinate system.
;
PLOT, autocorrY, YSTYLE=1, YMINOR=1, YTICKLEN=-0.008, $
YTICKS=1, $
YRANGE = [-1.0, 1.0], $
LINESTYLE=0, COLOR=0, BACKGROUND=1, $
YTITLE='!7r!x', XTITLE='Time Lag', $
TITLE="Time-Series Sample Autocorrelation", /NODATA
; Overplot the sample autocorrelation function of cYdata.
;
OPLOT, autocorrY, COLOR=4
; Plot the upper confidence interval limit line.
;
PLOTS, 0, conf, COLOR=0
PLOTS, info.cXmax, conf, COLOR=0, LINESTYLE=5, /CONTINUE
; Plot the lower confidence interval limit line.
;
PLOTS, 0, -conf, COLOR=0
PLOTS, info.cXmax, -conf, COLOR=0, LINESTYLE=5, /CONTINUE
; Restore the information structure.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
!Y.Margin = currentYMargin
end ; of AUTOCORR
;--------------------------------------------------------------------
;
; PURPOSE Compute the auto forecast function.
;
pro AUTOFCAST, $
event ; IN: event structure
; Get the info structure.
;
WIDGET_CONTROL, event.top, GET_UVALUE = info, /NO_COPY
; Make sure that the margin are set right.
;
!Y.MARGIN= [6.0, 2.0]
!X.MARGIN= [10.0, 3.0]
; This call-back function computes the
; autoregressive forecasting model
; of the time-series data, cYdata.
; The time-series data and forecasts
; are plotted in the draw window, cPwindow1.
; Compute (cNfcast) forecasts using a model of order (cOrder).
;
info.cFuture = TS_FCAST(info.cYdata, info.cOrder, info.cNfcast)
; Set the active plot window to cPwindow1.
;
WSET, info.cPwindow1
; Establish the plotting coordinate system.
;
PLOT, info.cXdata, info.cYdata, $
YTITLE='Y', XTITLE='Time', $
XRANGE=[0, info.cXmax+info.cFcastmax], XSTYLE=2,$
YRANGE=[info.cYmin-1, info.cYmax+1], YSTYLE=2, $
YMINOR=1, YTICKLEN=-0.008, LINESTYLE=0, $
CHARSIZE=1.0*info.charscale, COLOR=0, BACKGROUND=1, /NODATA
; Overplot the time-series data with a "diamond" symbol.
;
OPLOT, info.cXdata, info.cYdata, PSYM=4, SYMSIZE=2, COLOR=4
; Overplot the forecast data with a "triangle" symbol.
;
OPLOT, [info.cXmax+indgen(info.cNfcast)+1], info.cFuture, $
PSYM=5, SYMSIZE=1.5, COLOR=2
; Compute a smooth spline fit to the
; time-series and forecast data by
; increasing the number of points by a factor(fac).
;
fac = 10
xint = FINDGEN(fac*MAX(info.cXdata+info.cNfcast)+1) / fac
yint = SPLINE(FINDGEN(info.cNy+info.cNfcast), $
[info.cYdata,info.cFuture], xint, 0.1)
; Overplot the time-series and forecast data with the spline fit.
;
OPLOT, xint, yint, LINESTYLE=0, COLOR=0
; Create a symbol legend using the NORMAL coordinate system.
; Plot a "diamond" symbol.
; Set Y position 1/3 of the way between the lower edge of the
; window and the plot window.
;
ypos = !Y.WINDOW[0] / 3.0
PLOTS, 0.18, ypos+0.01, PSYM=4, SYMSIZE=2, COLOR=4, /NORMAL
; Plot the corresponding label.
;
XYOUTS, 0.20, ypos, "Time-Series Data", COLOR=0, /NORMAL
; Plot a "triangle" symbol.
;
PLOTS, 0.58, ypos+0.015, PSYM=5, SYMSIZE=1.5, COLOR=2, /NORMAL
; Plot the corresponding label.
;
XYOUTS, 0.60, ypos, "Autoregressive Forecasts", COLOR = 0, /NORMAL
; Restore the info structure.
;
WIDGET_CONTROL, event.top, SET_UVALUE = info, /NO_COPY
end ; of AUTOFCAST
;--------------------------------------------------------------------
;
; PURPOSE Generate a time series data.
;
function TSDATA, $
RANDOM = random ; IN: (opt) Generate a random time series.
; This call-back function defines either
; a pseudo-random or static time-series.
; Create a pseudo-random time-series.
;
if (KEYWORD_SET(random) NE 0) then begin
cYdata = SMOOTH(RANDOMN(seed, 41) * RANDOMU(seed, 41) * 50, 5)
endif else begin
; Uniformly sampled time-series data.
;
cYdata = $
[66.85, 67.08, 70.79, 69.90, 66.76, 67.43, 65.92, 66.31, $
67.12, 67.18, 65.05, 66.40, 65.54, 66.08, 65.39, 66.51, $
67.25, 69.12, 68.45, 68.57, 69.57, 67.05, 67.41, 65.81, $
67.70, 67.92, 69.67, 68.20, 67.72, 67.56, 65.30, 65.46, $
63.41, 64.98, 66.03, 66.80, 66.79, 65.96, 67.47, 69.02, $
69.88]
endelse
cNy = N_ELEMENTS(cYdata) ; Number of time-series points.
cXdata = LINDGEN(cNy) ; Indexed time intervals, [0, 1, 2, ... , Cny-1].
cXmax = MAX(cXdata) ; Maximum x value.
cYmax = MAX(cYdata) ; Maximum y value.
cYmin = MIN(cYdata) ; Minimum y value.
cFcastmax = cNy - 1 ; Maximum number of forecasts.
; Define the inside structure for this function.
;
insideStr={cYdata:cYdata, $
cNy:cNy, $
cXdata:cXdata,$
cXmax:cXmax,$
cYmax:cYmax,$
cYmin:cYmin,$
cFcastmax:cFcastmax }
; Return the insideStr which contains the data information.
;
RETURN, insideStr
end ; of TSDATA
;--------------------------------------------------------------------
;
; PURPOSE Handle the forecasting events.
;
pro ForecastEventHdlr, event
; Handle the 'close' or 'Quit' event for the
; close box.
;
if (TAG_NAMES(event, /STRUCTURE_NAME) EQ $
'WIDGET_KILL_REQUEST') then begin
WIDGET_CONTROL, event.top, /DESTROY
RETURN
endif
; This procedure is the event handler.
; Get the info structure from top-level base.
;
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY
; Determine which event.
;
WIDGET_CONTROL, event.id, GET_UVALUE=eventval
; Take the following action based on the corresponding event.
;
CASE eventval OF
"GenerateTS" : begin
; Desensitize the buttons
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=0
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=0
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=0
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=0
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=0
; Activate the HOURGLASS cursor to indicate
; a computationally intensive event.
;
WIDGET_CONTROL, info.wGenerateButton, /HOURGLASS
; Generate a pseudo-random time-series.
;
TSdataStr=TSDATA(/random)
; Copy the TSdataStr into the info structure.
;
info.cYdata=TSdataStr.cYdata
info.cXdata=TSdataStr.cXdata
info.cYmax=TSdataStr.cYmax
info.cXmax=TSdataStr.cXmax
info.cYmin=TSdataStr.cYmin
info.cNy=TSdataStr.cNy
info.cFcastmax=TSdataStr.cFcastmax
; Compute the autoregressive forecasting model.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
AUTOFCAST, event
; Compute the sample autocorrelation function.
;
AUTOCORR, event
; Get the info structure.
;
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY
; Sensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=1
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=1
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=1
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=1
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=1
; Restore the info structure.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
end ; of GenerateTS
"INFO" : begin
; Desensitize the buttons
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=0
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=0
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=0
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=0
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=0
; Display the information file.
;
if (Xregistered('XDisplayFile') EQ 0) then begin
XDisplayFile, filepath("forecast.txt", $
SUBDIR=['examples','demo','demotext']), $
DONE_BUTTON='Done', $
TITLE="Time series forecasting information", $
GROUP=event.top, WIDTH=55, HEIGHT=14
endif
; Sensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=1
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=1
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=1
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=1
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=1
; Restore the info structure.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
end ; of INFO
"QUIT" : begin
; Restore the info structure before destroying event.top.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
; Destroy widget hierarchy.
;
WIDGET_CONTROL, event.top, /DESTROY
end ; of QUIT
"SETOrder" : begin
; Desensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=1
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=0
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=0
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=0
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=0
; Determine the order of the forecasting model.
;
WIDGET_CONTROL, info.wOrderSlider, GET_VALUE=cOrder
info.cOrder=cOrder
; Compute the forecast using a model of order (cOrder).
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
AUTOFCAST, event
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY
; Sensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=1
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=1
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=1
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=1
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=1
; Restore the info structure.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
END
"SETNumber" : begin
; Desensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=0
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=1
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=0
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=0
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=0
; Determine the number of the forecasts.
;
WIDGET_CONTROL, info.wNumberSlider, GET_VALUE=cNfcast
info.cNfcast=cNfcast
; Compute (cNfcast) forecasts.
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
AUTOFCAST, event
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY
; Sensitize the buttons.
;
WIDGET_CONTROL, info.wOrderSlider, SENSITIVE=1
WIDGET_CONTROL, info.wNumberSlider, SENSITIVE=1
WIDGET_CONTROL, info.wAboutButton, SENSITIVE=1
WIDGET_CONTROL, info.wGenerateButton, SENSITIVE=1
WIDGET_CONTROL, info.wQuitButton, SENSITIVE=1
; Restore the info structure .
;
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
end
endcase
end ; of ForecastEventHdlr
;--------------------------------------------------------------------
;
; PURPOSE : Cleanup procedure.
;
pro CleanUpForecast, wTop
; Get the color table saved in the window's user value.
;
WIDGET_CONTROL, wTop, GET_UVALUE=info, /NO_COPY
; Restore the previous color table.
;
TVLCT, info.colorTable
; Restore the previous plot font.
;
!P.FONT = info.plotFont
; Restore the !X and !Y system variables.
;
!X = info.previousX
!Y = info.previousY
; Map the group leader base if it exists.
;
if (WIDGET_INFO(info.groupBase, /VALID_ID)) then $
WIDGET_CONTROL, info.groupBase, /MAP
end ; of CleanupForecast
;--------------------------------------------------------------------
;
; PURPOSE Forecast main procedure.
;
pro D_Forecast, $
GROUP=group, $ ; IN: (opt) group identifier
APPTLB = appTLB ; OUT: (opt) TLB of this application
; Check the validity of the group identifier.
;
ngroup = N_ELEMENTS(group)
if (ngroup NE 0) then begin
check = WIDGET_INFO(group, /VALID_ID)
if (check NE 1) then begin
print,'Error, the group identifier is not valid'
print, 'Return to the main application'
RETURN
endif
groupBase = group
endif else groupBase = 0L
; Make the system to have a maximum of 256 colors.
;
numcolors = !d.N_COLORS
if ((( !D.NAME EQ 'X') OR (!D.NAME EQ 'MAC')) $
AND (!D.N_COLORS GE 256L)) then begin
DEVICE, PSEUDO_COLOR=8
endif
DEVICE, DECOMPOSED=0, BYPASS_TRANSLATION = 0
; Get the current color table, retore it when exiting.
;
TVLCT, savedR, savedG, savedB, /GET
; Store the previuous !Y and !X settings. They
; will be restores when exiting this application.
;
previousY = !Y
previousX = !X
; Build color table from color vectors.
;
colorTable = [[savedR],[savedG],[savedB]]
; Save the current plot font in order to restore it when
; the spiro application is exited.
;
plotFont = !P.FONT
; Get the screen size.
;
DEVICE, GET_SCREEN_SIZE = screenSize
; Create the starting up message.
;
if (ngroup EQ 0) then begin
drawbase = startmes()
endif else begin
drawbase = startmes(GROUP=group)
endelse
; Call the TSdata FUNCTION to initialize the data that are
; contained in the structure TSdataStr.
;
TSdataStr=TSDATA()
; Define the initial forecasting parameters.
;
cOrder = 25 ; order of the model
cNfcast = 40 ; number of forecasts
; Load a predefined color tabel.
;
LOADCT, 12, /SILENT
TEK_COLOR, 0, 8
; Use harware-drawn font.
;
!P.FONT=0
; Get the tips.
;
sText = getTips(filepath('forecast.tip', $
SUBDIR=['examples','demo', 'demotext']) )
; Define a main widget base.
;
if (N_ELEMENTS(group) EQ 0) then begin
wTopBase = WIDGET_BASE(TITLE="Time-Series Forecasting Tool", $
/TLB_KILL_REQUEST_EVENTS, $
MAP=0, $
/COLUMN, $
TLB_FRAME_ATTR=1, Mbar=bar_base)
endif else begin
wTopBase = WIDGET_BASE(TITLE="Time-Series Forecasting Tool", $
/TLB_KILL_REQUEST_EVENTS, $
MAP=0, $
/COLUMN, $
GROUP_LEADER=group, $
TLB_FRAME_ATTR=1, Mbar=bar_base)
endelse
; Create the file|quit button.
;
wFileButton = WIDGET_BUTTON(bar_base, VALUE='File', /MENU)
wQuitButton = WIDGET_BUTTON(wFileButton, $
VALUE='Quit', UVALUE='QUIT')
; Create the help|about button.
;
wHelpButton = WIDGET_BUTTON(bar_base, /HELP, VALUE='About', /MENU)
wAboutButton = WIDGET_BUTTON(wHelpButton, $
VALUE='About Forecasting', UVALUE='INFO')
; Create the first child of the top level base(wTop).
;
wTopRowBase = WIDGET_BASE(wTopBase, COLUMN=2, /FRAME)
; Create a base for the left column.
;
wLeftBase = WIDGET_BASE(wTopRowBase, $
/BASE_ALIGN_CENTER, /COLUMN)
; Put the 2 sliders
; and the widget labels into a base here.
;
wParamBase = WIDGET_BASE(wLeftBase, /COLUMN, /FRAME, $
/BASE_ALIGN_CENTER, YPAD = 15)
wLabel1ID = WIDGET_LABEL(wParamBase, $
VALUE="Forecasting")
wLabel1bID = WIDGET_LABEL(wParamBase, $
VALUE="Parameters")
wLabel2ID = WIDGET_LABEL(wLeftBase, VALUE=" ")
; Define a slider widget to adjust the order
; of the forecasting model.
;
wOrderSlider = WIDGET_SLIDER(wParamBase, MIN=2, $
MAX=TSdataStr.cFcastmax, VALUE=cOrder,$
UVALUE="SETOrder", $
TITLE="Order of the Model")
; Define a slider widget to adjust
; the number of forecasts.
;
wNumberSlider = WIDGET_SLIDER(wParamBase, $
MIN=1, MAX=TSdataStr.cFcastmax, $
VALUE=cNfcast, $
UVALUE="SETNumber", $
TITLE="Number of Forecasts")
; Define a button widget to generate
; a pseudo-random time-series.
;
wGenerateBase = WIDGET_BASE(wLeftBase, /COLUMN)
wGenerateLabel = WIDGET_LABEL(wGenerateBase, $
VALUE='Generate new data')
wGenerateButton = WIDGET_BUTTON(wGenerateBase, $
VALUE="Generate", $
UVALUE="GenerateTS")
; Create a base for the right column.
;
wRightBase = WIDGET_BASE(wTopRowBase, Column=1)
; Define a draw widget with a horizontal dimension
; that is 650% of the horizontal hardware display size and
; a vertical dimension that is 30%
; of the horizontal hardware display size.
;
wDraw1ID = WIDGET_DRAW(wRightBase, XSIZE=0.65*screenSize[0], $
YSIZE=0.34*screenSize[0], RETAIN=2)
; Define a draw widget with a horizontal dimension
; that is 40% of the horizontal hardware display size
; and a vertical dimension that is 20%
; of the horizontal hardware display size.
;
wDraw2ID = WIDGET_DRAW(wRightBase, XSIZE=0.65*screenSize[0], $
YSIZE=0.19*screenSize[0], RETAIN=2)
; Create tips texts.
;
wStatusBase = WIDGET_BASE(wTopBase, MAP=0, /ROW)
nWidgets = 2
wText = LONARR(nWidgets)
widTips, wStatusBase, sText.text, XSIZE=36, $
YSIZE=3, NWIDGETS=nWidgets, wText
; Here, all the widget has been created.
; Realize the widget hierarchy.
;
WIDGET_CONTROL, wTopBase, /REALIZE
; Returns the top level base in the appTLB keyword.
;
appTLB = wTopBase
; Size the tips widgets.
;
sizeTips, wTopBase, wText, wStatusBase
; Setup the device to use the pointer cursors.
;
DEVICE, /CURSOR_ORIGINAL
; Determine the window value of plot window, wDraw1.
;
WIDGET_CONTROL, wDraw1ID, GET_VALUE=cPwindow1
; Determine the window value of plot window, wDraw2.
;
WIDGET_CONTROL, wDraw2ID, GET_VALUE=cPwindow2
; Set the active plot window to cPwindow2.
;
WSET, cPwindow2
; Get the character scaling factor.
;
charscale = 8.0/!d.X_CH_SIZE
cFuture=FINDGEN(40)
; Initialize the info structure.
;
info={ $
cYdata:TSdataStr.cYdata, $ ; array, y coordinates
cXdata:TSdataStr.cXdata, $ ; array, x coordinates
cYmax:TSdataStr.cYmax, $ ; Max value of cYdata
cXmax:TSdataStr.cXmax, $ ; Max value of cXdata
cYmin:TSdataStr.cYmin, $ ; Min value of cYdata
cNy:TSdataStr.cNy, $ ; integer number of data in cYdata
cFcastmax:TSdataStr.cFcastmax, $ ; integer Max number of forecast
cOrder:cOrder, $ ; Forecasting model Order parameter
cNfcast:cNfcast, $ ; Number of forecast
cFuture:cFuture, $ ; array, Future forecast
cPwindow1:cPwindow1, $ ; index to window 1
cPwindow2:cPwindow2 , $ ; index to window 2
wLabel1ID:wLabel2ID,$ ; Widget label 2 ID
wLabel2ID:wLabel2ID,$ ; Widget label 2 ID
WText: wText, $ ; Widget text IDs for tips
SText: sText, $ ; Text structure for tips
wDraw1ID:wDraw1ID,$ ; Widget Draw 1 ID
wDraw2ID:wDraw2ID,$ ; Widget Draw 2 ID
wOrderSlider:wOrderSlider,$ ; Order of parameters slider
wNumberSlider:wNumberSlider,$ ; Number of parameters slider
wAboutButton:wAboutButton , $ ; About button
wGenerateButton:wGenerateButton , $ ; Generate time series button
wQuitButton:wQuitButton , $ ; Quit button
colorTable:colorTable, $ ; Original Color Table
Charscale: charscale, $ ; Character scaling factor
plotFont:plotFont, $ ; Original Font
PreviousY : previousY, $ ; !Y system variable
PreviousX : previousX, $ ; !X system variable
groupBase: groupBase $ ; Base of Group Leader
}
; Register the info structure in
; the user value of the top-level base.
;
WIDGET_CONTROL, wTopBase, SET_UVALUE=info, /NO_COPY
; Create a structure similar to an event such that the
; functions AUTOCORR and AUTOFCAST can be executed
; before the XMANAGER command has been called.
;
passwtop = {ID:0L, TOP:wTopBase, HANDLER:0L}
; Compute the initial forecast.
;
AutoFcast, passwtop
; Compute the initial sample autocorrelation.
;
AUTOCORR, passwtop
; Destroy the starting up window.
;
WIDGET_CONTROL, drawbase, /DESTROY
; Map the top level base.
;
WIDGET_CONTROL, wTopBase, MAP=1
; Register with XMANAGER.
;
XMANAGER, "D_Forecast", wTopBase, $
EVENT_HANDLER="ForecastEventHdlr", CLEANUP="CleanUpForecast", $
/NO_BLOCK
end ; of D_Forecast